﻿using DotNetStar.OpenSDK.Payment;
using System.ComponentModel.DataAnnotations;

namespace DotNetStar.OpenSDK.WeChat.Pay
{
    /// <summary>
    /// 表示微信支付的退款查询 api 请求。微信订单号、商品订单号、退款单号、微信退款单号必须四选一。
    /// </summary>
    /// <seealso cref="WeChatPayApiRequest{RefundQueryApiResponse}" />
    public class RefundQueryApiRequest :WeChatPayApiRequest<RefundQueryApiResponse>
    {
        /// <summary>
        /// 初始化 <see cref="RefundQueryApiRequest"/> 类的新实例。
        /// </summary>
        /// <param name="config">支付配置。</param>
        /// <param name="requestUrl">退款查询 api 地址。若使用了沙箱地址，可以传入沙箱地址的 url。</param>
        public RefundQueryApiRequest(PaymentConfig config, string requestUrl = "https://api.mch.weixin.qq.com/pay/refundquery")
            : base(requestUrl, config)
        {
        }
        /// <summary>
        /// 微信的订单号，建议优先使用。
        /// </summary>
        [StringLength(32)]
        public string Transaction_Id { get; set; }
        /// <summary>
        /// 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
        /// </summary>
        [StringLength(64)]
        public string Out_Refund_No { get; set; }
        /// <summary>
        /// 微信生成的退款单号，在申请退款接口有返回。
        /// </summary>
        public string Refund_Id { get; set; }
        /// <summary>
        /// 偏移量，当部分退款次数超过10次时可使用，表示返回的查询结果从这个偏移量开始取记录。
        /// </summary>
        public int Offset { get; set; }
    }
}
